package com.itheima.demo001;

public class PupilTest {
    public static void main(String[] args) {
        //1.创建一个数组
        Pupil[] arr = new Pupil[3];

        //2.创建学生的对象
        Pupil p1 = new Pupil(001,"王小明",17);
        Pupil p2 = new Pupil(002,"李小雨",18);
        Pupil p3 = new Pupil(003,"孙小月",19);

        //3.把学生的对象，存入到数组中
        arr[0] = p1;
        arr[1] = p2;
        arr[2] = p3;

        //再次添加一个学生对象，并再添加的时候，进行学号的唯一性判断
        Pupil p4 = new Pupil(4,"赵小燕",18);

        //唯一性判断：①已存在，不用添加   ②不存在，添加
        //把P4添加到数组中：①存满，创建new数组，长度=老数组+1    ②未满，直接添加

        boolean flag = contains(arr,p4.getId());
        if(flag){
            //true,已存在，不用添加
            System.out.println("当前id重复，请修改后，再尝试添加");
        }else{
            //false,不存在，添加到数组中
            int count = getCounnt(arr);
            if(count == arr.length){
                //已经存满
                //创建一个new数组，长度=老数组+1    然后把老数组的元素，拷贝到新数组中
                Pupil[] newArr = creatNewArr(arr);

                //添加p4
                newArr[count] = p4;

                //添加完毕后，遍历所有学生的信息
                printArr(newArr);

            }else{
                //没有存满
                /*例如：p1 p2  null
                getCount获取到的是2，表示数组中已经有两个元素
                如果下次要添加数据，就是添加到2索引的位置
                */
                arr[count] = p4;

                //添加完毕后，遍历所有学生的信息
                printArr(arr);
            }
        }

    }
    //我要干嘛？唯一性判断
    //我干这件事，需要什么？数组，id
    //是否返回？返回
    public static boolean contains(Pupil[] arr, int id){
        for (int i = 0; i < arr.length; i++) {
            //依次获取到数组中的，每一个学生对象
            Pupil p = arr[i];
            if(p != null){
                //获取数组中学生对象的id
                int pid = p.getId();
                //比较
                if(pid == id){
                    return true;
                }
            }

        }
        //当循环结束，还没有找到要查找的id，则id不存在
        return false;
    }

    //定义一个方法，判断数组中，已经存了几个元素
    public static int getCounnt(Pupil[] arr){
        //定义一个计数器，用来统计几个元素
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                count++;
            }
        }
        //当循环结束，得到结果
        return count;
    }
    public static Pupil[] creatNewArr(Pupil[] arr){
        Pupil[] newArr = new Pupil[arr.length + 1];

        //循环遍历，得到老数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            //把老数组中的每一个元素，添加到新数组中
            newArr[i] = arr[i];
        }
        //返回新数组
        return newArr;
    }

    public static void printArr(Pupil[] arr){
        for (int i = 0; i < arr.length; i++) {
            Pupil p = arr[i];
            if(p != null){
                System.out.println(p.getId() + "," + p.getName() + "," + p.getAge());
            }
        }
    }

}
